#!/usr/bin/python
import sys
import os
import pexpect
import time
import pp
def expectandshow(child, expect):
        index=child.expect(expect)
        print child.before,child.after,
        return index
def set_salve_nis(ip):
	password="passw0rd"
	cmd="ssh root@"+ip+ " " + \
                "/sbin/chkconfig ypbind off;" + \
                "/sbin/chkconfig ypbind on;" + \
                "/etc/init.d/ypbind stop;" + \
                "/etc/init.d/ypbind start;"


        print cmd
        scp_child=pexpect.spawn(cmd)
        index=expectandshow(scp_child, \
                                ['Are you sure you want to continue connecting', \
                                "root@"+ip+"'s password:", \
                                "next host to add:", \
                                "Is this correct?  [y/n: y]" , \
                                pexpect.TIMEOUT, \
                                pexpect.EOF])
        if index == 0:
                scp_child.sendline('yes')
                ret = expectandshow(scp_child, ["root@"+Master_IP+"'s password:",pexpect.EOF])
                if ret == 0:
                        scp_child.sendline(password)
                        ret1 = expectandshow(scp_child, ["next host to add:", pexpect.EOF])
                        if ret1 == 0:
                                scp_child.sendcontrol('D')
                                ret2 = expectandshow(scp_child, ["Is this correct?  [y/n: y]",pexpect.EOF])
                                if ret2 == 0:
                                        scp_child.sendline("y")
                                        expectandshow(scp_child, [pexpect.EOF])
                                elif ret2 == 1:
                                        pass
                        elif ret1 == 1:
                                pass
                elif ret == 1:
                        pass
        elif index == 1:
                scp_child.sendline(password)
                ret1 = expectandshow(scp_child, ["next host to add:",pexpect.EOF])
                if ret1 == 0:
                        scp_child.sendcontrol('D')
                        ret2 = expectandshow(scp_child, ["Is this correct?  [y/n: y]",pexpect.EOF])
                        if ret2 == 0:
                                scp_child.sendline("y")
                                expectandshow(scp_child, [pexpect.EOF])
                        elif ret2 == 1:
                                pass
                elif ret1 == 1:
                        pass

        elif index == 2:
                print "timeout, ignore and continue."
        elif index == 3:
                pass	


path=sys.path[0]
fp_intr = open(path+'/ip','r')
fp_intr.readline()
order=[]
total_ip = 0
while True:
        line = fp_intr.readline()
        length = len(line)
        if length == 0: # Zero length indicates EOF
                break

        line=line[0:length-1]
        print line
	total_ip += 1
        order.append(line)
fp_intr.close();

start_time = time.time()
ppservers = ()
job_server = pp.Server(total_ip, ppservers=ppservers)
print "Starting pp with", job_server.get_ncpus(), "workers"
jobs = []
for ip in order:
        jobs.append(job_server.submit(set_salve_nis, (ip,), (expectandshow,), ("pexpect",)))

for job in jobs:
    job()

print "Time elapsed: ", time.time() - start_time, "s"
job_server.print_stats()


